/**
    Document   : SemanalUtil
    Created on : 24-may-2011, 12:49:23
    Author     : Paco FELC
 *  Description: Funciones de consulta de los Weekly Ladders y Palmares
 */

package com.bitoon.basketdudes.ws;

import com.bitoon.basketdudes.jpa.*;

import java.util.*;
import javax.naming.*;
import javax.persistence.*;


import javax.servlet.http.*;
import org.apache.log4j.*;
import org.jdom.*;
import org.jdom.output.XMLOutputter;

public class SemanalUtil {

    Context     initContext = null;
    Context     envContext  = null;
    Logger      log = Logger.getLogger(DatosEquipo.class);

    EntityManagerFactory emfBasket         = null;

    public SemanalUtil() {
        try {
            // JPA Units
            emfBasket   = PersistenceManager.getInstance().getEntityManagerFactory("jpa_basket");

        } catch (Exception e) {
            log.error("[ERROR][constructor]: No se puedo conectar a la base de datos: " , e);
        }

    }

    public String wsConsultarPalmares(HttpServletRequest request, HttpServletResponse response) {

        EntityManager   em      = null;
        XMLOutputter    out     = null;
        Document        doc     = null;
        int             error   = 0;

        try {
            em = emfBasket.createEntityManager(); // check 08.08.2012

            int equipo_id = Integer.parseInt(request.getParameter("equipo_id"));

            // The query result list has as many elements as there are groups.
            // Each element is an Object[] consisting of three items: a department instance, a Long and a Double.
/*            Query q = em.createQuery("SELECT p.palmaresPK.equipoId, p.palmaresPK.torneoId, sum(1) " +
                                     "FROM Palmares p where p.palmaresPK.equipoId = ? GROUP BY p.palmaresPK.equipoId, p.palmaresPK.torneoId order by p.palmaresPK.torneoId");*/
/*            Query q = em.createQuery("SELECT p.palmaresPK.equipoId, p.palmaresPK.torneoId, p.trofeoId, sum(1) " +
                                     "FROM Palmares p where p.palmaresPK.equipoId = ? " +
                                     "GROUP BY p.palmaresPK.equipoId, p.palmaresPK.torneoId, p.trofeoId order by p.palmaresPK.torneoId"); */
            Query q = em.createQuery("SELECT p.palmaresPK.equipoId, p.palmaresPK.torneoId, p.trofeoId,p.palmaresPK.zonaId, t.nombre, sum(1), max(p.palmaresPK.fecha) " +
                                     "FROM Palmares p, Torneo t where p.trofeoId is not null and p.palmaresPK.equipoId = ? and p.palmaresPK.torneoId=t.id " +
                                     "GROUP BY p.palmaresPK.equipoId, p.palmaresPK.torneoId, p.trofeoId,p.palmaresPK.zonaId,t.nombre  order by p.palmaresPK.torneoId");

            q.setParameter( 1, equipo_id );
            List<Object[]> result = q.getResultList();

            for ( Object objeto[] : result) {
                
                log.debug("equipo " +objeto[0]);
                log.debug("torneo " +objeto[1]);
                log.debug("trofeo"  +objeto[2]);
                log.debug("cuantos" +objeto[3]);
            }

             /* componemos el xml */
             Element root=new Element("consultarPalmares");
             root.setAttribute("err", new Integer(error).toString());

/*
             Element el_error=new Element("err");
             el_error.setAttribute("cod",new Integer(error).toString());
 *           root.addContent(el_error);
 *
 */
 
             if ( error == 0) {
                for ( Object objeto[] : result) {
                    Element el_partida=new Element("torneo");

                    el_partida.setAttribute("id",       String.valueOf( objeto[1] ));
                    el_partida.setAttribute("trofeo",   String.valueOf( objeto[2] ));
                    el_partida.setAttribute("zona",     String.valueOf( objeto[3] ));
                    el_partida.setAttribute("nombre",   String.valueOf( objeto[4] ));
                    el_partida.setAttribute("cuantos",  String.valueOf( objeto[5] ));
                    el_partida.setAttribute("f",        String.valueOf( objeto[6] ));

                    root.addContent(el_partida);
                 }
            }

            doc = new Document(root);//Creamos el documento
            doc.setDocType(null);
            out = new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarPalmares]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } // revisado 09/08/2012
        }

        return out.outputString(doc);
    }
   


}
